package org.cliff.message.platform.core.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;

/**
 * 接收消息存储主表
 * @TableName mp_received_message
 */
@TableName(value ="mp_received_message")
@Data
public class ReceivedMessage implements Serializable {

    /**
     * 消息ID,每一次消息发送都一个ID
     */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 唯一业务ID	用于做幂等性判断等
     */
    private String businessId;

    /**
     * 业务编码 每一个业务接口对应一个业务编码ID，与mp_interface_config一一对应
     */
    private String functionCode;

    /**
     * 请求URI，便于消息重发的时候再URI传递参数场景直接复用。
     */
    private String requestUri;

    /**
     * 报文类型	application/json, application/xml 等。
     */
    private String contentType;

    /**
     * JSON消息报文	JSON类型的报文，方便进行JSON查找
     */
    private Object jsonBody;

    /**
     * 非JSON的普通请求报文文本
     */
    private String requestBody;

    /**
     * 处理状态
     * P:等待 初始状态
     * R:处理中 进入业务代码进行数据处理
     * S:成功
     * E:错误 来源数据不完整或者是数据标准检查不通过 如果是本系统相关配套基础数据不完整等暂不给生产端反馈状态，等待下轮处理或通过预警机制发送邮件提醒进行消费系统的操作完善。
     * W: 警告： 数据不处理
     * 取值见{@link ProcessStatusConstants}
     */
    private String processStatus;

    /**
     * 错误详情	失败时的详细说明，供错误告警等展示详情。比如发送超时、总线故障等原因导致发送失败。
     */
    private String errorMessage;

    /**
     * 数据状态	N 无需处理
     */
    private String dataStatus;

    /**
     * 忽略错误	Y： 忽略本错误 当ProcessStatus为E时，标记为忽略错误
     */
    private String errorIgnore;

    /**
     * 反馈状态W：警告：反馈信息和代码按照系统自己定义规范填写，说明数据传输重复无需处理E: 错误： 来源数据不完整或者是数据标准检查不通过，反馈给生产端
     */
    private String feedbackStatus;

    /**
     * 自动重发控制 STOP：停止自动重发
     */
    private String autoResendControl;

    /**
     * 停止自动重发
     */
    public static final String AUTO_RESEND_STOP = "stop";


    /**
     * 幂等性控制 UR 上游重发，跳过幂等性检测
     */
    private String idempotentControl;

    /**
     * 原MessageId重传的时候，原有MessageId
     */
    private Long originalMessageId;

    /**
     * 扩展属性1
     */
    private String att1;

    /**
     * 扩展属性2
     */
    private String att2;

    /**
     * 扩展属性3
     */
    private String att3;

    /**
     * 扩展属性4
     */
    private String att4;

    /**
     * 扩展属性5
     */
    private String att5;

    /**
     * 扩展属性6
     */
    private String att6;

    /**
     * 扩展属性7
     */
    private String att7;

    /**
     * 扩展属性8
     */
    private String att8;

    /**
     * 扩展属性9
     */
    private String att9;

    /**
     * 扩展属性10
     */
    private String att10;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 修改时间
     */
    private Date updateTime;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}